import { computed } from 'vue';
import { useTodoStore } from '@vben/stores';
import { todoAdd, todoList, todoRemove, todoUpdate } from '#/api/system/todo';

/**
 * 工作台待办事项API封装
 * 负责调用后端API并更新store状态
 */
export function useWorkbenchTodo() {
  const todoStore = useTodoStore();

  /**
   * 加载待办事项列表
   */
  async function loadTodos() {
    try {
      todoStore.setLoading(true);
      
      // 工作台获取所有待办事项，不传递任何过滤条件
      const response = await todoList({
        pageNum: 1,
        pageSize: 100, // 工作台显示前100个
        // 不传递title, content, completed等过滤参数，获取所有数据
      });
      
      console.log('工作台API响应数据:', response); // 调试日志
      console.log('完整响应结构:', JSON.stringify(response, null, 2)); // 详细调试日志
      
      // 处理响应数据
      let todoData = [];
      
      // 标准分页响应格式
      if (response && response.data && response.data.rows) {
        todoData = response.data.rows;
        console.log('使用分页格式，获取到数据:', todoData.length, '条');
      } 
      // 直接数组在data中
      else if (response && response.data && Array.isArray(response.data)) {
        todoData = response.data;
        console.log('使用直接数组格式，获取到数据:', todoData.length, '条');
      } 
      // 响应本身就是数组
      else if (response && Array.isArray(response)) {
        todoData = response;
        console.log('响应本身是数组，获取到数据:', todoData.length, '条');
      }
      // 处理其他可能的格式
      else if (response && response.rows) {
        todoData = response.rows;
        console.log('使用rows格式，获取到数据:', todoData.length, '条');
      }
      else {
        console.warn('未识别的响应格式:', response);
      }
      
      // 确保数据是数组格式
      if (!Array.isArray(todoData)) {
        console.warn('todoData不是数组格式:', todoData);
        todoData = [];
      }
      
      todoStore.setTodos(todoData);
      console.log('最终设置到store的数据:', todoData.length, '条');
      console.log('todoData样例:', todoData.slice(0, 2)); // 显示前2条数据的结构
      
      return todoStore.todos;
    } catch (error: any) {
      console.error('加载待办事项失败:', error);
      console.error('错误详情:', error.response || error.message);
      throw error;
    } finally {
      todoStore.setLoading(false);
    }
  }

  /**
   * 添加新的待办事项
   */
  async function addTodo(title: string, content: string) {
    try {
      todoStore.setLoading(true);
      const todoData = {
        title: title.trim(),
        content: content.trim(),
        completed: 0, // 新建时默认未完成
      };

      const response = await todoAdd(todoData);
      
      console.log('添加待办事项响应:', response); // 调试日志
      
      // 由于后端ADD API只返回成功消息，不返回创建的数据
      // 所以直接重新加载列表以获取最新数据（包括后端生成的ID）
      await loadTodos();
      
      console.log('重新加载后的待办事项数量:', todoStore.todos.length);
      
      // 返回成功标志
      return { success: true, message: '添加成功' };
    } catch (error) {
      console.error('添加待办事项失败:', error);
      throw error;
    } finally {
      todoStore.setLoading(false);
    }
  }

  /**
   * 更新待办事项
   */
  async function updateTodo(todoId: number, updates: { title?: string; content?: string; completed?: number }) {
    try {
      todoStore.setLoading(true);
      const todoData = {
        todoId,
        ...updates,
      };

      await todoUpdate(todoData);
      
      // 更新本地状态
      todoStore.updateTodoInList(todoId, updates);
      
      return true;
    } catch (error) {
      console.error('更新待办事项失败:', error);
      throw error;
    } finally {
      todoStore.setLoading(false);
    }
  }

  /**
   * 删除待办事项
   */
  async function deleteTodo(todoId: number) {
    try {
      todoStore.setLoading(true);
      await todoRemove([todoId]);
      
      // 从本地状态中移除
      todoStore.removeTodoFromList(todoId);
      
      return true;
    } catch (error) {
      console.error('删除待办事项失败:', error);
      throw error;
    } finally {
      todoStore.setLoading(false);
    }
  }

  /**
   * 切换待办事项完成状态
   */
  async function toggleComplete(todoId: number) {
    try {
      const todo = todoStore.getTodoById(todoId);
      if (!todo) return null;

      const newCompletedStatus = todo.completed === 1 ? 0 : 1;
      
      console.log('切换完成状态 - 待办事项数据:', todo);
      console.log('切换完成状态 - 新状态:', newCompletedStatus);
      
      // 传递完整的数据以满足后端验证要求
      await updateTodo(todoId, { 
        title: todo.title,
        content: todo.content,
        completed: newCompletedStatus 
      });
      
      return todo;
    } catch (error) {
      console.error('切换完成状态失败:', error);
      throw error;
    }
  }

  /**
   * 初始化待办事项数据
   */
  async function initializeTodos() {
    try {
      await loadTodos();
      console.log('待办事项初始化完成，共加载', todoStore.todos.length, '条数据');
    } catch (error) {
      console.error('初始化待办事项失败:', error);
    }
  }

  /**
   * 备用加载方法 - 直接使用管理页面的调用方式
   */
  async function loadTodosBackup() {
    try {
      console.log('尝试备用加载方法...');
      todoStore.setLoading(true);
      
      // 直接模拟管理页面的调用方式
      const response = await todoList({
        pageNum: 1,
        pageSize: 100,
      });
      
      console.log('备用方法API响应:', response);
      
      // 直接按照管理页面的处理方式
      if (response && response.data && response.data.rows) {
        todoStore.setTodos(response.data.rows);
        return response.data.rows;
      }
      
      return [];
    } catch (error) {
      console.error('备用加载方法也失败:', error);
      return [];
    } finally {
      todoStore.setLoading(false);
    }
  }

  return {
    // Store状态 - 使用computed确保响应式
    todos: computed(() => {
      console.log('当前todos响应式数据:', todoStore.todos.length, '条');
      return todoStore.todos;
    }),
    isLoading: computed(() => todoStore.isLoading),
    
    // API方法
    loadTodos,
    loadTodosBackup, // 备用方法
    addTodo,
    updateTodo,
    deleteTodo,
    toggleComplete,
    initializeTodos,
    
    // 统计数据
    getDataStats: todoStore.getDataStats,
  };
}